package com.second.client.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.second.client.pojo.entity.ClientUser;
import com.second.client.pojo.vo.ChangeStatusVo;
import com.second.client.pojo.vo.RegisterClientVo;
import com.second.client.pojo.vo.UpdateIntegrationVo;
import com.second.client.pojo.vo.UploadDataVo;
import org.apache.ibatis.annotations.Param;

/**
 * (ClientUser)表数据库访问层
 *
 * @author LvYongQi
 * @since 2021-07-23 09:53:36
 */
public interface ClientUserDao extends BaseMapper<ClientUser> {

    boolean changeClientStaus(@Param("statusVo") ChangeStatusVo statusVo);

    boolean changeGrowthById(@Param("statusVo") ChangeStatusVo statusVo);

    /**
     * 判断客户的成长值，修改客户的会员等级
     * @param id 客户Id
     * @param levelId 等级id
     * @return
     */
    boolean updateLevelByGrowth(@Param("id") Integer id,@Param("levelId") Integer levelId);

    boolean addIntegration(Integer id, Integer integration);

    boolean reduceIntegration(Integer id, Integer integration);

    /**
     * 用户租车上传证件资料
     * @param uploadDataVo 用户证件资料
     * @return 上传结果
     */
    boolean uploadDataById(@Param("uploadDataVo") UploadDataVo uploadDataVo);

    int getOneByUsernameOrPhone(@Param("username") String username,
                                @Param("phone") String phone,
                                @Param("cardNumber") String cardNumber);

    /**
     * 根据客户Id，修改身份证照片或驾照照片
     * @param clientUser 会员实体类
     * @return 修改结果
     */
    boolean updatePhotoById(@Param("clientUser") ClientUser clientUser);

    boolean updatePassword(@Param("registerClientVo") RegisterClientVo registerClientVo);

    /**
     * 增加客户的账户余额
     * @param updateIntegrationVo 会员余额、积分
     * @return 修改结果
     */
    boolean addAccountBalance(@Param("updateIntegrationVo") UpdateIntegrationVo updateIntegrationVo);

    /**
     * 减少客户的账户余额
     * @param updateIntegrationVo 会员余额、积分
     * @return 修改结果
     */
    boolean reduceAccountBalance(@Param("updateIntegrationVo") UpdateIntegrationVo updateIntegrationVo);

    /**
     * 客户使用余额下单，根据客户id，减去客户的账户余额
     * @param clientId 客户id
     * @param paidAmount 实付金额
     * @return 修改结果
     */
    boolean deductAccountBalance(@Param("clientId") Integer clientId,
                                 @Param("paidAmount") Double paidAmount);

}
